# -*- coding: utf-8 -*-

# Autor: Pedro Godinho, n.º 6355
# Data: 05/12/2011


# http://matplotlib.sourceforge.net/examples/api/barchart_demo.html
# Estes imports servem para não dar erros de Bad Screen Distance 320
import matplotlib
matplotlib.use('QT4Agg')
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar

# imports do gráfico
import numpy as np
import matplotlib.pyplot as plt
from Dados import Dados

class Graficos:
    '''
    Classe que cria os gráficos com as estatisticas
    '''

    def graficoNDocentesEstabelecimentoAno(dados, estabelecimento, ano):
        '''
        Este método cria uma gráfico de Barras, com o numero de docentes por estabelecimento num determinado ano
        '''

        dados = Dados()
        
        #numero de barras = numero de anos   Neste caso só existe apenas uma Barra
        nBarras = 1
        nDocentes = []

        # vai a classe Dados e faz o return do número total de docentes por estabelecimento por ano
        nDocentes.append(dados.getNDocentesPorEstabelecimentoPorAno(estabelecimento, ano))
        pass
        
        docentesAno = tuple(nDocentes)
        
        ind = np.arange(nBarras)  # the x locations for the bars
        width = 0.2               # the width of the bars
        
        
        plt.subplot(111)
        rects1 = plt.bar(ind + width * 3 / 2, docentesAno, width, color='r')
        
        
        plt.ylabel('Numero de Doentes')
        plt.xlabel('Ano ' + str(ano))
        plt.title('Numero de Docentes em\n' + estabelecimento.decode('utf-8'))

        # x bar scale
        plt.xticks( ind + width * 2)
        
        def autolabel(rects):
            # attach some text labels
            for rect in rects:
                height = rect.get_height()
                plt.text(rect.get_x() + rect.get_width()/2., 1.001*height, '%d'%int(height),
                        ha='center', va='bottom')
        
        autolabel(rects1)

        plt.show()
        pass

    def graficoNDocentesCategoriaEstabelecimentoAno(dados, categoria, estabelecimento, ano):
        '''
        Este método cria uma gráfico de Barras, com o numero de docentes por categoria por estabelecimento num determinado ano
        '''

        dados = Dados()
        
        #numero de barras = numero de anos   Neste caso só existe apenas uma Barra
        nBarras = 1
        nDocentes = []

        # vai a classe Dados e faz o return do número total de docentes por categoria por estabelecimento por ano
        nDocentes.append(dados.getNDocentesPorCategoriaPorEstabelecimentoPorAno(categoria, estabelecimento, ano))
        pass
        
        docentesAno = tuple(nDocentes)
        
        ind = np.arange(nBarras)  # the x locations for the bars
        width = 0.2               # the width of the bars
        
        
        plt.subplot(111)
        rects1 = plt.bar(ind + width * 3 / 2, docentesAno, width, color='y')
        
        
        plt.ylabel('Numero de \n' + categoria.decode('utf-8'))
        plt.xlabel('Ano ' + str(ano))
        plt.title('Numero de Docentes em\n' + estabelecimento.decode('utf-8'))

        # x bar scale
        plt.xticks(ind + width * 2)
        
        def autolabel(rects):
            # attach some text labels
            for rect in rects:
                height = rect.get_height()
                plt.text(rect.get_x() + rect.get_width()/2., 1.001*height, '%d'%int(height),
                        ha='center', va='bottom')
        
        autolabel(rects1)

        plt.show()
        pass

    def graficoNDocentesGrauEstabelecimentoAno(dados, grau, estabelecimento, ano):
        '''
        Este método cria uma gráfico de Barras, com o numero de docentes por grau por estabelecimento num determinado ano
        '''

        dados = Dados()
        
        #numero de barras = numero de anos   Neste caso só existe apenas uma Barra
        nBarras = 1
        nDocentes = []

        # vai a classe Dados e faz o return do número total de docentes por grau por estabelecimento por ano
        nDocentes.append(dados.getNDocentesPorGrauPorEstabelecimentoPorAno(grau, estabelecimento, ano))
        
        docentesAno = tuple(nDocentes)
        
        ind = np.arange(nBarras)  # the x locations for the bars
        width = 0.2               # the width of the bars
        
        
        plt.subplot(111)
        rects1 = plt.bar(ind + width * 3 / 2, docentesAno, width, color='b')
        
        
        plt.ylabel('Numero de \n' + grau.decode('utf-8'))
        plt.xlabel('Ano ' + str(ano))
        plt.title('Numero de Docentes em\n' + estabelecimento.decode('utf-8'))

        # x bar scale
        plt.xticks( ind + width * 2)
        
        def autolabel(rects):
            # attach some text labels
            for rect in rects:
                height = rect.get_height()
                plt.text(rect.get_x() + rect.get_width()/2., 1.001*height, '%d'%int(height),
                        ha='center', va='bottom')
        
        autolabel(rects1)

        plt.show()
        pass
